
import pandas as pd
import numpy as np
from sklearn.metrics import mean_squared_error
import sys

print('🧪 使用清理数据重新评估TCN性能:')
print()

# 模拟简单的基线预测（使用历史平均）
df = pd.read_csv('output/data/stock_data_600519_daily_with_indicators_clean.csv', index_col='date', parse_dates=True)

# 计算变化率
close_prices = df['close']
daily_returns = close_prices.pct_change().dropna()

# 划分训练测试集
train_size = int(len(daily_returns) * 0.8)
train_returns = daily_returns[:train_size]
test_returns = daily_returns[train_size:]
test_prices = close_prices[train_size+1:train_size+1+len(test_returns)]

print(f'📊 数据划分: 训练集{len(train_returns)}条, 测试集{len(test_returns)}条')
print(f'训练期间平均变化率: {train_returns.mean():.6f} ({train_returns.mean()*100:.4f}%)')
print(f'测试期间实际变化率标准差: {test_returns.std():.6f} ({test_returns.std()*100:.4f}%)')
print()

# 基线1: 总是预测历史平均变化率
baseline_pred = np.full(len(test_returns), train_returns.mean())
baseline_prices = test_prices.shift(1).iloc[1:] * (1 + baseline_pred[1:])
actual_prices = test_prices.iloc[1:]

baseline_rmse = np.sqrt(mean_squared_error(actual_prices, baseline_prices))
relative_error = (baseline_rmse / actual_prices.mean()) * 100

print(f'📈 基线模型性能（预测历史均值）:')
print(f'RMSE: {baseline_rmse:.2f}元')
print(f'相对误差: {relative_error:.2f}%')
print(f'当前价格水平: {actual_prices.mean():.2f}元')
print()

# 基线2: 总是预测0变化（价格不变）
zero_pred = np.zeros(len(test_returns))
zero_pred_prices = test_prices.shift(1).iloc[1:] * (1 + zero_pred[1:])

zero_rmse = np.sqrt(mean_squared_error(actual_prices, zero_pred_prices))
zero_relative_error = (zero_rmse / actual_prices.mean()) * 100

print(f'📊 零变化基线性能（预测价格不变）:')
print(f'RMSE: {zero_rmse:.2f}元')
print(f'相对误差: {zero_relative_error:.2f}%')
print()

print('💡 结论:')
print('1. 如果TCN模型RMSE明显低于这些基线，则表现良好')
print('2. 如果接近零变化基线，说明模型过于保守')
print('3. 真实的好模型应该在50-200元RMSE范围内(相对误差3-15%)')
